package de.unibi.techfak.msp.eatThis.bean;

import java.io.Serializable;

/**
 * Die Superklasse für alle Beans. Das Feld id muss immer mit dem "Primary Key"
 * des entsprechenden Datenbankeintrags übereinstimmen oder ist null, falls das
 * Bean noch nicht persistiert wurde. Jede Bean muss die Methoden
 * {@link #equals(Object)}, {@link #hashCode()} und {@link #toString()}
 *  überschreiben.
 *
 * @author Michael Adams
 *
 */
public abstract class GenericBean implements Serializable {

    /**
     * Die standart id (wichtig für das Serialisieren).
     */
    protected static final long serialVersionUID = 1L;
    
    /** Primary Key. */
    protected Integer id;
    
    /**
     * Der Standartkonstuktor muss verfügbar sein (serialisierung).
     */
    public GenericBean() {
        // Macht nichts
    }

    /**
     * Der Standartkonstruktor setzt mindestens die id der Entität (pk) oder
     * null falls sie neu erstellt wird.
     * 
     * @param beanId Die eindeutige id des Bean.
     */
    public GenericBean(final Integer beanId) {
        this.setId(beanId);
    }

    /**
     * @param beanId Die neue id für das Bean.
     */
    public final void setId(final Integer beanId) {
        this.id = beanId;
    }

    /**
     * @return the id
     */
    public final Integer getId() {
        return id;
    }

    @Override
    public abstract boolean equals(Object compare);

    @Override
    public abstract int hashCode();
    
    @Override
    public abstract String toString();
    
    /**
     * @return true wenn alle Felder die nicht null sein dürfen gesetzt sind.
     */
    //CHECKSTYLE:OFF Wir erweitern diese Methode
    public boolean isStateOk() {
    //CHECKSTYLE:ON
        return true;
    }
}
